export default function myNextTokens(tokens) {
    // 结果数组
    const nestedTokens = [];

    // 栈结构，存放小tokens，栈顶（靠近端口的，最新进入的）的tokens数组中当前操作的这个tokens小数组
    const sections = [];

    // 收集器，天生指向nestedTokens结果数组，引用类型值，所以指向的是同一个数组
    // 收集器的指向会变化，当遇见#的时候，收集器会指向这个token的下标为2的新数组
    let collector = nestedTokens;
    tokens.reduce((pre, cur, index) => {
        if (cur[0] === "#") {
            collector.push(cur);
            // 入栈
            sections.push(cur);
            // 收集器要换人。给token添加下标为2的项，并且让收集器指向它
            collector = cur[2] = [];
        } else if (cur[0] === "/") {
            // 出栈 pop()会返回刚刚弹出的项
            sections.pop();
            collector = sections.length > 0 ? sections[sections.length - 1][2] : nestedTokens;
        } else {
            collector.push(cur);
        }
    }, []);
    return (nestedTokens);
}
